package com.sfdk.graphics.tooltip
{
import com.sfdk.graphics.api.ITooltipHolder;
import com.sfdk.graphics.api.ITooltipManager;
import com.sfdk.log.Logger;

import flash.display.DisplayObject;
import flash.events.MouseEvent;

/**
	 * Conteneur pour les tooltip avec options de base dessus
	 **/
	 
	public class ToolTipHolder implements ITooltipHolder
	{
		private var toolTipList_ : Vector.<ToolTipInfo>;
		private var targetList_ : Vector.<String>;
		private var parent_ : ITooltipManager;
		
		public function ToolTipHolder(parent : ITooltipManager)
		{
			toolTipList_ = new Vector.<ToolTipInfo>();
			targetList_ = new Vector.<String>();
			parent_ = parent;
		}

		public function addToolTip(toolTip : ToolTipInfo) : void
		{
			var target : DisplayObject = toolTip.getTarget();
			var idx : int = targetList_.indexOf(target.name);
			if(idx != -1) // Le tooltip existe déjà, on le remplace
			{ 
				toolTipList_.splice(idx, 1, toolTip);
			}
			else // Sinon on l'ajoute directement
			{
				targetList_.push(target.name);
				toolTipList_.push(toolTip);
			}
		}
		
		public function removeToolTip(target : DisplayObject) : void
		{
			var idx : int = targetList_.indexOf(target.name);
			if(idx != -1) // Le tooltip existe bien on l'enlève
			{ 
				toolTipList_.splice(idx, 1);
				targetList_.splice(idx, 1);
			}
			else
			{
				Logger.error("ToolTipHolder :: "+(parent_ as DisplayObject).name+" trying to remove non-existing tooltip on "+target.name); 
			}
		}
		
		public function hasToolTip(target : DisplayObject) : Boolean
		{
			return (targetList_.indexOf(target.name) != -1);
		}
		
		public function displayToolTip(e : MouseEvent) : void
		{
			var target : DisplayObject = e.target as DisplayObject;
			var index : int = targetList_.indexOf(target.name);
			if(index != -1) // On a bien un toolTip à écrire
			{
				var toolTipInfo : ToolTipInfo = toolTipList_[index]; 
				var toolTipSprite : ToolTipSprite = new ToolTipSprite(toolTipInfo);
				parent_.setToolTipSprite(toolTipSprite);
				toolTipSprite.initLabel();
			}
		}
		
		public function hideToolTip(e : MouseEvent) : void
		{
			parent_.setToolTipSprite(null);
		}
	}
}